package controller;

import bo.UsuarioBO;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Acao;
import model.Usuario;
import util.ConsUtil;
import util.CustomException;
import util.FacesUtil;

@ManagedBean(name = "sessionController")
@SessionScoped
public class SessionController implements Serializable {

    private final UsuarioBO usuarioBO = new UsuarioBO();
    private String usuario;
    private String senha;
    private Usuario usuarioLogado;
    private String usuarioLogadoNome;
    private List<Acao> permissoes;

    public void login() {
        try {
            setUsuarioLogado(usuarioBO.login(usuario, senha));
            if (usuarioLogado != null) {
                if (usuarioLogado.getUsuNome().contains(" ")) {
                    setUsuarioLogadoNome(usuarioLogado.getUsuNome().substring(0, usuarioLogado.getUsuNome().indexOf(" ")));
                } else {
                    setUsuarioLogadoNome(usuarioLogado.getUsuNome());
                }

                if (((getUsuarioLogado().getUsuBloqueado() != null) && (getUsuarioLogado().getUsuBloqueado()))
                        || ((getUsuarioLogado().getUsuarioGrupo() != null) && (getUsuarioLogado().getUsuarioGrupo().getUgrBloqueado() != null) && (getUsuarioLogado().getUsuarioGrupo().getUgrBloqueado()))) {
                    FacesUtil.exibirMsgError(null, "Atenção", "Usuário Bloqueado!");
                } else {
                    if ((!usuarioLogado.getUsuEmail().equals(ConsUtil.MASTER_LOGIN))
                            && (!usuarioLogado.getUsuSenha().equals(ConsUtil.MASTER_PASSWORD))) {
                        this.permissoes = usuarioBO.selecionarPermissao(usuarioLogado);
                    }
                    FacesUtil.redirecionarPagina("/EHomeWebApplication/index.jsf");
                }
            } else {
                FacesUtil.exibirMsgError(null, "Atenção", "Usuário e/ou Senha Inválidos!");
            }
        } catch (CustomException ex) {
            FacesUtil.exibirMsgExcecao(ex);
        }
    }

    public void salvarPerfil() {
        try {
            usuarioBO.salvar(usuarioLogado);
            FacesUtil.exibirMsgInfo(null, "Concluído", "Perfil salvo com sucesso!");
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void sair() {
        try {
            setUsuario(null);
            setSenha(null);
            setUsuarioLogado(null);
            setUsuarioLogadoNome(null);
            FacesUtil.redirecionarPagina("/EHomeWebApplication/login.jsf");
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public boolean getPermissao(String acaoDescricao) {
        if (usuarioLogado != null) {
            if ((!usuarioLogado.getUsuEmail().equals(ConsUtil.MASTER_LOGIN))
                    && (!usuarioLogado.getUsuSenha().equals(ConsUtil.MASTER_PASSWORD))) {
                for (Acao acao : permissoes) {
                    if (acao.getAcaoDescricao().toLowerCase().equals(acaoDescricao.toLowerCase())) {
                        return true;
                    }
                }
            } else {
                return true;
            }
        }
        return false;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public Usuario getUsuarioLogado() {
        return usuarioLogado;
    }

    public void setUsuarioLogado(Usuario usuarioLogado) {
        this.usuarioLogado = usuarioLogado;
    }

    public String getUsuarioLogadoNome() {
        return usuarioLogadoNome;
    }

    public void setUsuarioLogadoNome(String usuarioLogadoNome) {
        this.usuarioLogadoNome = usuarioLogadoNome;
    }
}
